package br.slic.jsf;

import java.util.ArrayList;
import java.util.List; 

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.slic.entidade.Funcionalidade;
import br.slic.entidade.Perfil;
import br.slic.entidade.PerfilFuncionalidade;
import br.slic.exception.ServiceException;
import br.slic.services.interfaces.AdminServiceLocal;
import br.slic.services.interfaces.GenericServiceLocal;
import br.slic.util.DadosUtil;
import br.slic.util.SLICConstantes;

@ManagedBean
@ViewScoped
public class PerfilBean extends CRUD<Perfil> {

	private static final long serialVersionUID = 36750846043225353L;
	
	@EJB
	private GenericServiceLocal genericService;
	
	@EJB
	private AdminServiceLocal adminService;	

	@Override
	protected List<Perfil> getEntidadesImpl() throws ServiceException {
		return genericService.obterEntidades(Perfil.class);
	}

	private void carregarFuncionalidades() throws ServiceException {
		List<PerfilFuncionalidade> perfilFuncionalidades = new ArrayList<PerfilFuncionalidade>();
		List<PerfilFuncionalidade> perfilFuncionalidadesNovo = new ArrayList<PerfilFuncionalidade>();
		if( !DadosUtil.isEmpty(getEntidade().getId()) ) {
			Perfil perfil = genericService.obterEntidade(getEntidade().getId(), Perfil.class);
			perfilFuncionalidades = perfil.getPerfisFuncionalidade();			
		}

		List<Funcionalidade> funcionalidades = genericService.obterEntidades(Funcionalidade.class);
		for(Funcionalidade funcionalidade : funcionalidades) {
			PerfilFuncionalidade addPerfilFuncionalidade = new PerfilFuncionalidade();
			addPerfilFuncionalidade.setFuncionalidade(funcionalidade);
			for(PerfilFuncionalidade perfilFuncionalidade : perfilFuncionalidades) {
				if(funcionalidade.equals(perfilFuncionalidade.getFuncionalidade())) {
					addPerfilFuncionalidade = perfilFuncionalidade;
					break;
				}
			}
			perfilFuncionalidadesNovo.add(addPerfilFuncionalidade);
		}
		getEntidade().setPerfisFuncionalidade(perfilFuncionalidadesNovo);
	}
	
	@Override
	protected void editarImpl() throws ServiceException {
		carregarFuncionalidades();
	}

	@Override
	protected void novoImpl() throws ServiceException {
		setEntidade(new Perfil());
		carregarFuncionalidades();
	}
	
	@Override
	protected void salvarImpl() throws ServiceException {
		adminService.persistePerfil(getEntidade());
	}

	@Override
	protected String getNomeFuncionalidade() {
		return SLICConstantes.NOME_FUNCIONALIDADE_PERFIS;
	}
}
